package com.fengkai.filepost.pdfoutstream.test.ODsolutions;

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;

/**
 * @author Fengkai
 * @creat 2023/4/11
 * 题目
 * 给定一个由纯数字组成以字符串表示的数值，现要求字符串中的每个数字最多只能出现2次，超过的需要进行删除；删除某个重复的数字后，其它数字相对位置保持不变。
 * 如34533，数字3重复超过2次，需要删除其中一个3，删除第一个3后获得最大数值4533
 * 请返回经过删除操作后的最大的数值，以字符串表示。
 * 输入
 * 第一行为一个纯数字组成的字符串，长度范围：[1,100000]
 * 输出
 * 输出经过删除操作后的最大的数值
 */
public class GetMaxNumberByDeleteOverNUm {

       public static void main(String[] args){
           System.out.println(getMaxNumberByDelete("5445795045"));

       }
    public static String getMaxNumberByDelete (String inputNum) {
        char[] chars = inputNum.toCharArray();
        HashMap<Character, Integer> numCountsMap = new HashMap<>();
        LinkedList<Character> str2LinkeedList = new LinkedList<>();
        for (Character character : chars) {
            numCountsMap.put(character, numCountsMap.getOrDefault(character, 0) + 1);
            str2LinkeedList.add(character);
        }
        for (Map.Entry<Character, Integer> characterIntegerEntry : numCountsMap.entrySet()) {
            Character value = characterIntegerEntry.getKey();
            int count = characterIntegerEntry.getValue();
            for (int i = 0; i < str2LinkeedList.size() && count > 2; i++) {
                    if (value == str2LinkeedList.get(i)) {
                        if (i == str2LinkeedList.size() - 1) {
                            str2LinkeedList.removeLast();
                            count --;
                        }else if (str2LinkeedList.get(i + 1) >= value){
                            str2LinkeedList.remove(i);
                            i --;
                            count --;
                        }
                    }
            }

        }
        StringBuilder stringBuilder = new StringBuilder();
        for (Character character : str2LinkeedList) {
            stringBuilder.append(character);
        }
        return stringBuilder.toString();
    }
}
